// 引入配置好的 multerConfig
const multerConfig = require('./multerConfig');
const fs = require('fs');
const { v4: uuidv4, validate } = require('uuid');
const path = require('path');
// 上传到服务器地址
const BaseURL = 'http://localhost:8088';
// 上传到服务器的目录
const imgPath = '/public/upload/drawlist/';

// 封装上传图片的接口
function uploadAvatar(req, res, num) {
    return new Promise((resolve, reject) => {
        // 使用 Multer 配置处理单个文件上传
        multerConfig.single('file')(req, res, function (err) {
            if (err) {
                // 传递的图片格式错误或者超出文件限制大小，就会reject出去
                reject(err);
            } else if (!req.file) {
                // 处理空文件的情况
                reject(new Error('上传的文件为空'));
            } else {
                // 验证表单字段
                if (validate1(req.body, num)) {
                    const imageUrl = BaseURL + imgPath + req.file.filename;
                    // 获取除 file 字段外的其他表单字段数据
                    const otherFields = req.body;
                    // 将图片 URL 和其他表单字段数据一起返回
                    resolve({
                        imageUrl,
                        otherFields
                    });
                } else {
                    reject(new Error('creator or drawbook is empty'));
                }
            }
        });
    });
}

// 删除图片
function deleteImageByURL(imageURL) {
    return new Promise((resolve, reject) => {
        // 检查 imageURL 是否为字符串
        if (typeof imageURL !== 'string') {
            return reject(new Error('Invalid image URL'));
        }

        // 确保 imageURL 以 BaseURL 开头
        if (!imageURL.startsWith(BaseURL)) {
            return reject(new Error('Invalid image URL'));
        }

        // 解析图片URL，获取图片在服务器上的相对路径
        let imagePath = imageURL.replace(BaseURL, '');

        // 检查路径是否有效
        if (!imagePath || imagePath === '/') {
            return reject(new Error('Invalid image path'));
        }

        // 构造图片的绝对路径
        const fullPath = path.join(__dirname, '../', imagePath);

        // 验证路径是否在允许的目录范围内，防止路径穿越攻击
        const uploadDir = path.join(__dirname, '../public/upload/drawlist');
        if (!fullPath.startsWith(uploadDir)) {
            return reject(new Error('Invalid image path'));
        }

        // 删除图片
        fs.unlink(fullPath, (err) => {
            if (err) {
                reject(err);
            } else {
                resolve({ message: 'Image deleted successfully' });
            }
        });
    });
}

// 验证表单字段
function validate1(resp, num) {
    switch (num) {
        case 1:
            let { creator, drawbook } = resp;
            if (!creator || !drawbook) {
                return false;
            } else {
                return true;
            }
        case 2:
            let { name, content } = resp;
			console.log(name)
            if (!name || !content) {
                return false;
            } else {
                return true;
            }
        case 6:
            return validate16(resp);
        default:
            return true;
    }
}

module.exports = { uploadAvatar, deleteImageByURL };